﻿using System;
using System.Collections.Generic;
using System.Text;
using Sinacor.Infra.Service.Common;

namespace Sinacor.Servico.Bovespa.Operador.Service.ServiceImplementation.Translator.BusinessEntityToDataContract
{
    public class Operador
    {
        #region ToPreferenciasResponse

        public DataContract.Response.PreferenciasResponse ToPreferenciasResponse(BusinessEntity.Preferencias from)
        {
            if (from == null) return null;

            DataContract.Response.PreferenciasResponse preferencias = new DataContract.Response.PreferenciasResponse();
            preferencias.Bolsa = from.Bolsa;
            preferencias.CodigoOperador = from.CodigoOperador;
            preferencias.Mercado = (DataContract.Enum.TipoMercado?)from.Mercado;
            preferencias.Ordem = (DataContract.Enum.TipoOrdem?)from.Ordem;
            preferencias.OrdemModoInsert = from.OrdemModoInsert;
            preferencias.OrdenaDigitacaoDecrescente = from.OrdenaDigitacaoDecrescente;
            preferencias.PopulaLoteAutomaticamenteAposInsercao = from.PopulaLoteAutomaticamenteAposInsercao;
            preferencias.PopulaLoteAutomaticamenteAposPreBoleto = from.PopulaLoteAutomaticamenteAposPreBoleto;
            preferencias.UtilizaDataPreBoleto = from.UtilizaDataPreBoleto;            

            return preferencias;
        }

        #endregion

        #region ToOperadorResponse

        public DataContract.Response.OperadorResponse ToOperadorResponse(BusinessEntity.Operador from)
        {
            if (from == null) return null;

            return new DataContract.Response.OperadorResponse
            {
                Subordinado = from.Subordinado,
                CodigoOperador = from.CodigoOperador,
                CodigoOperadorMegaBolsa = from.CodigoOperadorMegaBolsa,
                CodigoOperadorRendaFixa = from.CodigoOperadorRendaFixa,
                IndicadorDesprezaOperadorSinalOfertasMegaBolsa = from.IndicadorDesprezaOperadorSinalOfertasMegaBolsa,
                IndicadorOperadorHomeBroker = from.IndicadorOperadorHomeBroker,
                IndicadorPontaMesa = from.IndicadorPontaMesa,
                LoginOperador = from.LoginOperador,
                NomeOperador = from.NomeOperador,
                Bloqueado = from.Bloqueado

            };
        }

        public List<DataContract.Response.OperadorResponse> ToOperadorResponse(List<BusinessEntity.Operador> from)
        {
            if (from == null) return null;

            List<DataContract.Response.OperadorResponse> retorno = new List<DataContract.Response.OperadorResponse>();
            
            foreach (BusinessEntity.Operador item in from)
            {
                retorno.Add(new DataContract.Response.OperadorResponse
                {                    
                    Subordinado = item.Subordinado,
                    CodigoOperador = item.CodigoOperador,
                    CodigoOperadorMegaBolsa = item.CodigoOperadorMegaBolsa,
                    CodigoOperadorRendaFixa = item.CodigoOperadorRendaFixa,
                    IndicadorDesprezaOperadorSinalOfertasMegaBolsa = item.IndicadorDesprezaOperadorSinalOfertasMegaBolsa,
                    IndicadorOperadorHomeBroker = item.IndicadorOperadorHomeBroker,
                    IndicadorPontaMesa = item.IndicadorPontaMesa,
                    LoginOperador = item.LoginOperador,
                    NomeOperador = item.NomeOperador,
                    Bloqueado = item.Bloqueado
                });
            }
            return retorno;
        }

        #endregion

        #region ToOrigemResponse

        public DataContract.Response.OrigemResponse ToOrigemResponse(BusinessEntity.Origem from)
        {
            if (from == null) return null;

            return new DataContract.Response.OrigemResponse
            {
                Corretora = from.Corretora,
                OperadorOrigem = from.OperadorOrigem,
                OperadorReceptor = from.OperadorReceptor
            };
        }

        public List<DataContract.Response.OrigemResponse> ToOrigemResponse(List<BusinessEntity.Origem> from)
        {
            if (from == null) return null;

            List<DataContract.Response.OrigemResponse> retorno = new List<DataContract.Response.OrigemResponse>();

            foreach (BusinessEntity.Origem item in from)
            {
                retorno.Add(new DataContract.Response.OrigemResponse
                {
                    Corretora = item.Corretora,
                    OperadorOrigem = item.OperadorOrigem,
                    OperadorReceptor = item.OperadorReceptor
                });
            }
            return retorno;
        }

        #endregion

        #region ToSubordinadoResponse

        public DataContract.Response.SubordinadoResponse ToSubordinadoResponse(BusinessEntity.Subordinado from)
        {
            if (from == null) return null;

            return new DataContract.Response.SubordinadoResponse
            {
                Codigo = from.Codigo,
                Login = from.Login,
                Nome = from.Nome
            };
        }

        public List<DataContract.Response.SubordinadoResponse> ToSubordinadoResponse(List<BusinessEntity.Subordinado> from)
        {
            if (from == null) return null;

            List<DataContract.Response.SubordinadoResponse> retorno = new List<DataContract.Response.SubordinadoResponse>();

            foreach (BusinessEntity.Subordinado item in from)
            {
                retorno.Add(new DataContract.Response.SubordinadoResponse
                {
                    Codigo = item.Codigo,
                    Login = item.Login,
                    Nome = item.Nome
                });
            }
            return retorno;
        }

        #endregion
    }
}
